// 导入请求库
import { $http } from '@escook/request-miniprogram'

// 配置请求根路径 - 实际开发中需替换为真实API地址
$http.baseUrl = 'https://api.example.com'

// 请求拦截器
$http.beforeRequest = function(options) {
  // 展示loading效果
  uni.showLoading({
    title: '加载中...'
  })
  
  // 获取token并添加到请求头，实现身份验证
  const token = uni.getStorageSync('token')
  if (token) {
    options.header = {
      ...options.header,
      'Authorization': `Bearer ${token}`
    }
  }
}

// 响应拦截器
$http.afterRequest = function(res) {
  // 隐藏loading效果
  uni.hideLoading()
  
  // 可以在这里统一处理错误
  if (res.statusCode === 401) {
    // token过期，需要重新登录
    uni.showToast({
      title: '登录已过期，请重新登录',
      icon: 'none'
    })
    // 清除本地token
    uni.removeStorageSync('token')
    // 跳转到登录页
    setTimeout(() => {
      uni.navigateTo({
        url: '/pages/login/index'
      })
    }, 1500)
  }
  
  if (res.statusCode !== 200) {
    // 请求失败
    uni.showToast({
      title: res.data.message || '请求失败',
      icon: 'none'
    })
    return Promise.reject(res)
  }
}

// 封装GET请求
export const get = (url, data = {}) => {
  return $http.get(url, data)
}

// 封装POST请求
export const post = (url, data = {}) => {
  return $http.post(url, data)
}

// 封装PUT请求
export const put = (url, data = {}) => {
  return $http.put(url, data)
}

// 封装DELETE请求
export const del = (url, data = {}) => {
  return $http.delete(url, data)
}

export default {
  get,
  post,
  put,
  del
} 